home *** CD-ROM | disk | FTP | other *** search
/ SGI Developer Toolbox 6.1 / SGI Developer Toolbox 6.1 - Disc 4.iso / src / haeberli / fonttools / adjustfont.c < prev    next >
C/C++ Source or Header  |  1994-08-01  |  4KB  |  193 lines

  1. /*
  2.  * Copyright 1991, 1992, 1993, 1994, Silicon Graphics, Inc.
  3.  * All Rights Reserved.
  4.  *
  5.  * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, Inc.;
  6.  * the contents of this file may not be disclosed to third parties, copied or
  7.  * duplicated in any form, in whole or in part, without the prior written
  8.  * permission of Silicon Graphics, Inc.
  9.  *
  10.  * RESTRICTED RIGHTS LEGEND:
  11.  * Use, duplication or disclosure by the Government is subject to restrictions
  12.  * as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data
  13.  * and Computer Software clause at DFARS 252.227-7013, and/or in similar or
  14.  * successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished -
  15.  * rights reserved under the Copyright Laws of the United States.
  16.  */
  17. /*
  18.  *    adjustfont - 
  19.  *        Adjust an object font.
  20.  *
  21.  *                Paul Haeberli - 1990
  22.  *
  23.  */
  24. #include "gl.h"
  25. #include "device.h"
  26. #include "stdio.h"
  27. #include "objfnt.h"
  28.  
  29. float fgetmousex();
  30. float fgetmousey();
  31. int curchar;
  32. objfnt *fnt;
  33.  
  34. main(argc,argv)
  35. int argc;
  36. char **argv;
  37. {
  38.     short val;
  39.     float pos;
  40.     float ixpos, iypos;
  41.     float xpos, ypos;
  42.     int dx, dy;
  43.     int xmove, ymove;
  44.  
  45.     curchar = 'A';
  46.     if( argc<3 ) {
  47.     fprintf(stderr,"usage: adjustfont file.of out.of\n");
  48.     exit(1);
  49.     } 
  50.     fnt = readobjfnt(argv[1]);
  51.     if(!fnt) {
  52.     fprintf(stderr,"adjustfont: can't open input file\n");
  53.     exit(1);
  54.     } 
  55.     keepaspect(4,3);
  56.     winopen("adjustfont");
  57.     subpixel(1);
  58.     RGBmode();
  59.     doublebuffer();
  60.     gconfig();
  61.     makeframe();
  62.     qdevice(LEFTMOUSE);
  63.     qdevice(MIDDLEMOUSE);
  64.     qdevice(UPARROWKEY);
  65.     qdevice(DOWNARROWKEY);
  66.     while(1) {
  67.     switch(qread(&val)) {
  68.         case REDRAW:
  69.         makeframe();
  70.         break;
  71.         case LEFTMOUSE:
  72.         if(val) {
  73.             if(!getcharadvance(fnt,curchar,&xmove,&ymove))
  74.             break;
  75.             ixpos = getmousex();
  76.             iypos = getmousey();
  77.             while(getbutton(LEFTMOUSE)) {
  78.             xpos = getmousex();
  79.             ypos = getmousey();
  80.             dx = xpos-ixpos;
  81.             dy = ypos-iypos;
  82.             if(shiftdown()) {
  83.                 xmove = xmove+dx;
  84.                 addcharmetrics(fnt,curchar,xmove,ymove);
  85.             } else { 
  86.                 translatechar(fnt,curchar,dx,dy);
  87.             }
  88.             showchar(fnt,curchar);
  89.             ixpos = xpos;
  90.             iypos = ypos;
  91.            }
  92.         } else {
  93.             writeobjfnt(argv[2],fnt);
  94.         }
  95.         break;
  96.         case MIDDLEMOUSE:
  97.         if(val) {
  98.             while(getbutton(MIDDLEMOUSE)) {
  99.             pos = fgetmousex();
  100.             curchar = 32+(int)(96*pos);
  101.             showchar(fnt,curchar);
  102.             }
  103.         }
  104.         break;
  105.         case UPARROWKEY:
  106.         if(val) {
  107.             curchar++;
  108.             if(curchar>(32+96))
  109.                curchar = 32+96;
  110.             showchar(fnt,curchar);
  111.         }
  112.         break;
  113.         case DOWNARROWKEY:
  114.         if(val) {
  115.             curchar--;
  116.             if(curchar<(32))
  117.                curchar = 32;
  118.             showchar(fnt,curchar);
  119.         }
  120.         break;
  121.     }
  122.     }
  123. }
  124.  
  125. makeframe()
  126. {
  127.     reshapeviewport();
  128.     ortho2(-0.1,1.9,-0.5,1.0);
  129.     cpack(0x00ffffff);
  130.     clear();
  131.     swapbuffers();
  132.     showchar(fnt,curchar);
  133. }
  134.  
  135. showchar(fnt,c)
  136. objfnt *fnt;
  137. int c;
  138. {
  139.     int didit;
  140.     float swidth;
  141.     int xmove, ymove;
  142.  
  143.     cpack(0x00ffffff);
  144.     clear();
  145.     pushmatrix();
  146.     translate(0.2,0.0,0.0);
  147.  
  148.     cpack(0x00808080);
  149.     move2(-100.0,0.0);
  150.     draw2(100.0,0.0);
  151.     move2(-100.0,0.4);
  152.     draw2(100.0,0.4);
  153.     move2(-100.0,0.6);
  154.     draw2(100.0,0.6);
  155.  
  156.     pushmatrix();
  157.     scale(1.0/fnt->scale,1.0/fnt->scale,0.0);
  158.     cpack(0x000000ff);
  159.     rectf(0.0,0.0,10.0,10.0);
  160.     cpack(0x00000000);
  161.     if(drawobjchar(fnt,c)) {
  162.     getcharadvance(fnt,c,&xmove,&ymove);
  163.     cpack(0x000000ff);
  164.     rectf(0.0,0.0,10.0,10.0);
  165.     cpack(0x000000ff);
  166.     /* bboxshow(str); */
  167.     cpack(0x00000000);
  168.     drawobjchar(fnt,c);
  169.     popmatrix();
  170.     } else 
  171.     popmatrix();
  172.     popmatrix();
  173.     swapbuffers();
  174. }
  175.  
  176. int xtrans, ytrans;
  177.  
  178. static warpfunc(s)
  179. short s[2];
  180. {
  181.     s[0] = s[0] + xtrans;
  182.     s[1] = s[1] + ytrans;
  183. }
  184.  
  185. translatechar(fnt,c,dx,dy)
  186. objfnt *fnt;
  187. int c, dx, dy;
  188. {
  189.     xtrans = dx;
  190.     ytrans = dy;
  191.     applytocharverts(fnt,c,warpfunc);
  192. }
  193.